1   /*
2    * Copyright (c) 2004, Oracle and/or its affiliates. All rights reserved.
3    * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4    *
5    * This code is free software; you can redistribute it and/or modify it
6    * under the terms of the GNU General Public License version 2 only, as
7    * published by the Free Software Foundation.
8    *
9    * This code is distributed in the hope that it will be useful, but WITHOUT
10   * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11   * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12   * version 2 for more details (a copy is included in the LICENSE file that
13   * accompanied this code).
14   *
15   * You should have received a copy of the GNU General Public License version
16   * 2 along with this work; if not, write to the Free Software Foundation,
17   * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18   *
19   * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20   * or visit www.oracle.com if you need additional information or have any
21   * questions.
22   */
23  
24  /*
25   * @test
26   * @bug 4984872
27   * @summary Basic tests of toPlainString method
28   * @run main ToPlainStringTests
29   * @run main/othervm -XX:+AggressiveOpts ToPlainStringTests
30   * @author Joseph D. Darcy
31   */
32  
33  import java.math.*;
34  
35  public class ToPlainStringTests {
36      public static void main(String argv[]) {
37          String [][] testCases = {
38              {"0",                       "0"},
39              {"1",                       "1"},
40              {"10",                      "10"},
41              {"2e1",                     "20"},
42              {"3e2",                     "300"},
43              {"4e3",                     "4000"},
44              {"5e4",                     "50000"},
45              {"6e5",                     "600000"},
46              {"7e6",                     "7000000"},
47              {"8e7",                     "80000000"},
48              {"9e8",                     "900000000"},
49              {"1e9",                     "1000000000"},
50  
51              {".0",                      "0.0"},
52              {".1",                      "0.1"},
53              {".10",                     "0.10"},
54              {"1e-1",                    "0.1"},
55              {"1e-1",                    "0.1"},
56              {"2e-2",                    "0.02"},
57              {"3e-3",                    "0.003"},
58              {"4e-4",                    "0.0004"},
59              {"5e-5",                    "0.00005"},
60              {"6e-6",                    "0.000006"},
61              {"7e-7",                    "0.0000007"},
62              {"8e-8",                    "0.00000008"},
63              {"9e-9",                    "0.000000009"},
64              {"9000e-12",                "0.000000009000"},
65  
66              {"9000e-22",                 "0.0000000000000000009000"},
67              {"12345678901234567890",     "12345678901234567890"},
68              {"12345678901234567890e22",  "123456789012345678900000000000000000000000"},
69              {"12345678901234567890e-22", "0.0012345678901234567890"},
70          };
71  
72          int errors = 0;
73          for(String[] testCase: testCases) {
74              BigDecimal bd = new BigDecimal(testCase[0]);
75              String s;
76  
77              if (!(s=bd.toPlainString()).equals(testCase[1])) {
78                  errors++;
79                  System.err.println("Unexpected plain result ``" +
80                                     s + "'' from BigDecimal " +
81                                     bd);
82              }
83              bd = new BigDecimal("-"+testCase[0]);
84              if (bd.signum()!=0 && !(s=(bd.toPlainString())).equals("-"+testCase[1])) {
85                  errors++;
86                  System.err.println("Unexpected plain result ``" +
87                                     s + "'' from BigDecimal " +
88                                     bd);
89              }
90          }
91  
92          if(errors > 0)
93              throw new RuntimeException(errors + " errors during run.");
94      }
95  }